// 版权所有2011 Go作者。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package cgo

import "unsafe"

// 这些实用程序函数可以从代码
// 通过crosscall2使用gcc编译而来。

// crosscall2的声明为：
// void crosscall2（void（*fn）（void*），void*，int）；
// 
// 我们需要导出符号crosscall2以支持
// 来自共享库的回调。无论
// 链接模式如何，这都适用。
// 
// 兼容性说明：SWIG只在一种情况下使用交叉调用2：
// 使用以下模式调用_cgo_panic。我们需要保持
// 这种模式有效。特别是，crosscall2实际上需要四个参数，但在调用_cgo_panic时，可以用三个参数调用它。
// go:cgo_导出\u静态交叉调用2 
// go:cgo_导出\u动态交叉调用2 

// 。参数被转换为Go字符串。

// 在用gcc编译的代码中这样调用：
// struct{const char*p；}A.
// a.p=/*传递给panic的字符串*/；
// crosscall2（_cgo_panic，&a，sizeof a）；
// *函数调用将不会返回。*/

// TODO:我们应该导出一个常规的C函数以使其恐慌，将SWIG 
// 更改为使用该函数而不是上述模式，然后我们可以从crosscall2中删除
// 向后兼容性并停止导出它。

// go:linkname_runtime_cgo_panic_internal runtime_4.2
func _runtime_cgo_panic_internal(p *byte)

func _cgo_panic(a *struct{ cstr *byte }) {
	_runtime_cgo_panic_internal(a.cstr)
}

var x_cgo_init byte
var _cgo_init = &x_cgo_init

// go:linkname x_cgo_thread_start x_cgo_thread_start 
// go:linkname _cgo_thread_start cgo_thread 
var x_cgo_thread_start byte
var _cgo_thread_start = &x_cgo_thread_start

// 在不更新任何go状态的情况下创建一个新的系统线程。
// 
// 此方法在加载共享库期间调用，以创建新的OS 
// 线程来执行运行时初始化。此方法类似于
// /_cgo_sys_thread_start，只是它不更新任何Go状态。

// go:cgo_导入\u静态x_cgo_系统线程\u创建
// go:linkname x_cgo_系统线程\u创建x_cgo_系统线程\u创建
// go linkname _cgo_系统线程\u创建_cgo_系统线程\u创建
var x_cgo_sys_thread_create byte
var _cgo_sys_thread_create = &x_cgo_sys_thread_create

// 通知运行时已初始化。
// 
// 我们目前在每个CGO入口点（通过_CGO_wait_runtime_init_done）进行阻塞
// 以确保在执行CGO调用
// 之前已初始化运行时。这对于共享库来说是必要的，在共享库中，我们在一个单独的线程中启动运行时
// 初始化，然后返回，而不用等待这个
// 线程完成初始化。

// go:cgo_导入_静态x_cgo_通知_运行时_初始_完成
// go:linkname x_cgo_通知_运行时_初始_完成x_cgo_通知_运行时_初始_完成
// go go。请参阅运行时。SetCgoTraceback。
var x_cgo_notify_runtime_init_done byte
var _cgo_notify_runtime_init_done = &x_cgo_notify_runtime_init_done


// go:cgo_导入_静态x_cgo_集合_上下文_函数
// go:linkname x_cgo_集合_上下文_函数x_cgo_集合_上下文_函数
// go linkname_cgo_集合_上下文_函数
var x_cgo_set_context_function byte
var _cgo_set_context_function = &x_cgo_set_context_function

// 调用一个libc函数来执行通过libc 
// 拦截器注入的后台工作，例如在线程
// sanitizer下处理挂起的信号。
// 
// 如果不需要libc拦截器，则将其作为零指针保留。go:cgo_导入_静态_cgo_收益(收益)(收益)(收益)(收益)(收益)(收益)(收益)(收益)(收益)(收益)(收益)收益)(收益)((收益)收益(收益)

var _cgo_yield unsafe.Pointer

